package com.example.design.patterns.geekbang.创建型.单例模式.替代方案.单机;

/**
 * 第一种解决思路是：
 * 创建完实例之后，再调用 init() 函数传递参数。
 * 需要注意的是，我们在使用这个单例类的时候，要先调用 init() 方法，然后才能调用 getInstance() 方法，
 * 否则代码会抛出异常。
 */
public class Singleton1 {
    private static Singleton1 instance = null;
    private final int paramA;
    private final int paramB;

    private Singleton1(int paramA, int paramB) {
        this.paramA = paramA;
        this.paramB = paramB;
    }

    public static Singleton1 getInstance() {
        if (instance == null) {
            throw new RuntimeException("Run init() first.");
        }
        return instance;
    }

    public synchronized static Singleton1 init(int paramA, int paramB) {
        if (instance != null) {
            throw new RuntimeException("Singleton1 has been created!");
        }
        instance = new Singleton1(paramA, paramB);
        return instance;
    }
}

//Singleton1.init(10, 50); // 先init，再使用
//Singleton1 singleton2 = Singleton1.getInstance();